package wikist.service.management.page;

import org.slim3.datastore.Datastore;

import wikist.meta.PageEntryMeta;
import wikist.model.PageEntry;

import com.google.appengine.api.datastore.Transaction;

/**
 * Wikiページの登録内容の管理を行うサービス
 * 
 * @author onjiro.mohyahya
 */
public class PageEntryManagementService {

    /**
     * デフォルト・コンストラクター
     */
    public PageEntryManagementService() {
    }

    /**
     * URLに割り当てられたページ内容の取得
     * 
     * @param pageUrl
     *            ページの割り当てURL
     * @return URLに割り当てられたページ内容
     */
    public PageEntry get(String pageUrl) {
        PageEntryMeta meta = PageEntryMeta.get();
        return Datastore.query(meta).filter(meta.url.equal(pageUrl)).asSingle();
    }

    /**
     * ページ内容をURLに割り当てて登録。すでに同じURLで登録が存在する場合は上書きする。
     * 
     * @param url
     *            割り当て対象のURL
     * @param title
     *            ページタイトル
     * @param contentInWiki
     *            ページ内容（Wiki記法）
     */
    public void entry(String url, String title, String contentInWiki) {

        PageEntry newEntry = get(url);
        if (newEntry == null) {
            newEntry = new PageEntry();
        }
        newEntry.setUrl(url);
        newEntry.setTitle(title);
        newEntry.setContentInWiki(contentInWiki);

        Transaction trx = Datastore.beginTransaction();
        Datastore.put(trx, newEntry);
        trx.commit();
    }
}
